"""
变量识别：定义每个变量及其在数据集中的角色
单变量分析：对于连续变量，独立构建每个变量的箱形图或直方图；对于分类变量，构建条形图以显示频率
双变量分析：通过构建可视化工具确定变量之间的相互作用
~连续和连续：散点图
~分类和分类：堆积柱形图
~分类和连续：箱线图与扭曲图相结合
检测和处理缺失值
检测和处理异常值
数据探索  专用notebook
"""
from jili.report.chart_boxplot import chart_boxplot
from jili.tool.convert import data_dropna
import matplotlib.pyplot as plt
plt.rcParams["font.sans-serif"]=["SimHei"] #设置字体
plt.rcParams["axes.unicode_minus"]=False #该语句解决图像中的“-”负号的乱码问题
def exploration_one(df,i):#一维数据分布
    #分布展示，频图，箱图，概率密度图，
    chart_boxplot(df[i])
def exploration_two(df,x,y,y_info):#二维关系分布
    #
    plt.figure(figsize=(16, 5), dpi=100)
    plt.subplot(1, 2, 1)
    s0 = {"all": df[x]}
    for k, v in y_info.items():
        k0 = y + "_" + k
        s0[k0] = df.loc[df[y] == v, x]
    plt.hist(list(s0.values()), label=list(s0.keys()))
    plt.title(x+"柱状分布")
    plt.legend()
    plt.subplot(1, 2, 2)
    s0 = {"all": df[x]}
    for k, v in y_info.items():
        k0 = y + "_" + k
        s0[k0] = df.loc[df[y] == v, x]
    plt.boxplot(list(s0.values()), vert=False,labels=list(s0.keys()))
    # plt.text(color='red', fontsize=16,horizontalalignment="center")
    plt.title(x+"箱型分布")
    # plt.legend()
    plt.show()

def data_descript_byclass(df, x_c, y_c, y_info={"y": 1, "n": 0}):
    x = x_c + [y_c]
    df = df[x].dropna()
    for i in x_c:
        exploration_one(df,i)
        exploration_two(df,i,y_c,y_info)